#include<iostream>
#include<map>
#include<functional>
int minus(int a,int b)
{
    return a-b;
}
class Add
{
public:
    int operator()(int a, int b)
    {
        return a+b;
    }




}:

int main()
{
    //[]:捕获列表:获取上下文中的变量
    //值捕获：以右值形式捕获变量值
    //&:引用捕获
    //=:以值捕获所有变量
    //():函数参数列表
    //{}:函数主体
    //自动推导返回值类型
    //本质就是仿函数
        // int b=20;
        // int count=10;
        // auto f=[=,&count](int a)
        // {

        //     std::cout<<count<<" "<<a<<" "<<"lambda\n";
        //     return 20;
        // };
        // f(10);
    //函数对象:融合三种对函数调用形式，形成统一格式
        // Add a;
        // std::function<int(int,int)>f=[](int a,int b){return a+b};
        // std::function<int(int,int)> f=minus;

        std::map<char,std::function<int(int,int)>> m;
        m['+']=a;
        m['-']=minus;
        m['*']=[](int a,int b){return a*b;};
        m['/']=[](int a,int b){return a/b};
    //工厂
    //map替代switch多分支：注册机
        std::cout<<m['+'](1,2)<<std::endl;
        
        return 0;
}